#ifndef PASSWORD_UTILS_H
#define PASSWORD_UTILS_H

#include <string>
#include <cstring>
#include <vector>
#include <cctype>
#include <sstream>
#include <algorithm>
#include <iomanip>
#include <openssl/md5.h>
#include <openssl/sha.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>

namespace plugins {
class PasswordUtils {
public:
    // 生成密码的哈希值（存储到数据库）
    static std::string hashPassword(const std::string& password);

    // 验证密码（输入密码 vs 数据库中的哈希值）
    static bool verifyPassword(const std::string& inputPassword, const std::string& storedHash);

private:
    // 辅助函数：判断是否为旧密码格式（32位十六进制字符串）
    static bool isOldPW(const std::string& password);

    // 辅助函数：计算字符串的MD5哈希（返回32位小写十六进制，对应PHP的md5()）
    static std::string md5(const std::string& input);

    // 辅助函数：Base64编码（对应PHP的base64_encode()）
    static std::string base64_encode(const std::string& input);

    // 辅助函数：Base64解码（对应PHP的base64_decode()）
    static std::string base64_decode(const std::string& input);

    // 辅助函数：计算字符串的SHA1哈希（返回二进制结果，对应PHP的sha1($str, true)）
    static std::string sha1_bin(const std::string& input);
};
}  // namespace plugins

#endif  // PASSWORD_UTILS_H